package br.com.ericogr.hanoi.database;

import java.io.Serializable;
import java.util.Date;

public class Pontuacao implements Serializable {
    private static final long serialVersionUID = 1L;
    
    private Long mId;
    private int mPratos;
    private int mMovimentos;
    private long mTempo;
    private Date mData;
    
    public Pontuacao() {
        this(0, Integer.MAX_VALUE, Integer.MAX_VALUE, null);
    }
    
    public Pontuacao(int pratos) {
        this(pratos, Integer.MAX_VALUE, Integer.MAX_VALUE, null);
    }
    
    public Pontuacao(int pratos, int movimentos) {
        this(pratos, movimentos, Integer.MAX_VALUE, null);
    }
    
    public Pontuacao(int pratos, int movimentos, long tempo) {
        this(pratos, movimentos, tempo, null);
    }
    
    public Pontuacao(int pratos, int movimentos, long tempo, Date data) {
        this.mPratos = pratos;
        this.mMovimentos = movimentos;
        this.mTempo = tempo;
        this.mData = data;
    }
    
    public Long getId() {
        return mId;
    }
    
    public void setId(Long id) {
        this.mId = id;
    }
    
    public int getPratos() {
        return mPratos;
    }
    
    public void setPratos(int pratos) {
        this.mPratos = pratos;
    }
    
    public int getMovimentos() {
        return mMovimentos;
    }
    
    public void setMovimentos(int movimentos) {
        this.mMovimentos = movimentos;
    }
    
    public long getTempo() {
        return mTempo;
    }
    
    public void setTempo(long tempo) {
        this.mTempo = tempo;
    }
    
    public Date getData() {
        return mData;
    }
    
    public void setData(Date data) {
        this.mData = data;
    }
    
    public int calcularQuantidadeMinimaDeMovimentos() {
        return (int)(Math.pow(2, mPratos) - 1);
    }
    
    public boolean isMovimentosMinimosAtingido() {
        return calcularQuantidadeMinimaDeMovimentos() == mMovimentos;
    }
    
    public void incrementaMovimento() {
        this.mMovimentos++;
    }
}